<?php

namespace app\crm\controller;


use think\Exception;
use think\Db;

class Import
{

    /**
     * 数据导入
     * 1、添加客户、2、添加合同订单、3、添加回款
     */
    public function index(){
        set_time_limit(0);
        $res=Db::name("xls_content")->where(["status"=>0])->limit(2000)->select();
        $time=strtotime(date("2018-08-08"));//同意新增修改成交等时间
        foreach ($res as $k=>$v){
            $data=json_decode($v['content'],true);
            $owner_user_id=$this->get_owner_user_id($data["7"]);//负责人id
            $param=[
                "time"=>$time,//全局统一时间戳
                "customer_company"=>$data["3"],//客户公司
                "customer_name"=>$data["4"],//客户姓名
                "customer_owner_user_id"=>$owner_user_id,//该客户的负责人id
                "customer_consult_user_id"=>$data["16"]?$this->get_owner_user_id($data["16"]):"",//绑定客户的咨询会计id
                "contract_num"=>"F-F-F".str_pad($v["id"], 5, '0', STR_PAD_LEFT),//合同编号
                "contract_name"=>$data["3"],//服务公司=客户公司
                "contract_money"=>trim($data["12"]),//合同金额
                "contract_owner_user_id"=>$owner_user_id,//合同负责人id=客户的负责人id
                "contract_arrears"=>$data["13"],//尾款金额
                "contract_crm_grvgkz"=>$data["19"],//服务期数
                "contract_butler_id"=>"3",//管家id=默认张丽萍为管家
                "contract_is_accounting"=>strstr($data["10"], "记账")?"1":"0",//是否流转到记账板块
                "contract_monthly_agency_price"=>($data["12"] && $data["19"])?bcdiv($data["12"],$data["19"],2):"0",//月代理服务费单价
                "contract_crm_oonnxn"=>$data["15"],//原来销售姓名
                "finance_code"=>str_pad($v["id"], 5, '0', STR_PAD_LEFT),//财务计数序号5位数0填充
                "customer_id"=>"",//客户id
                "contract_id"=>"",//合同id
                "finance_money"=>bcsub($data["12"],$data["13"],2),//回款金额=合同金额-尾款
                "finance_owner_user_id"=>$owner_user_id,//负责人id
            ];

            Db::startTrans();
            try{
                $param["customer_id"]=$this->getCustomer($param);//获取客户id
                $param["contract_id"]=$this->addContract($param);//添加合同并返回合同id
                $this->addReceivable($param);//添加回款
                //如果都导入成功就标记该条数据为已处理
                Db::name("xls_content")->where(["id"=>$v["id"]])->update(["status"=>1]);
                Db::commit();
            }catch(Exception $e){
                Db::rollback();
                file_put_contents("import_customer.log",date("Y-m-d H:i:s").":".json_encode($e->getMessage(),256).PHP_EOL,FILE_APPEND);
            }
        }
        echo "success!";
    }
    //添加合同
    private function addContract($param){
        $contractData=[
            "customer_id"=>$param["customer_id"],//客户名称
            "name"=>$param["contract_name"],//服务公司名字
            "num"=>$param["contract_num"],//合同编号
            "order_date"=>date("Y-m-d",$param["time"]),//下单时间
            "money"=>$param["contract_money"],//合同订单金额
            "total_price"=>$param["contract_money"],//产品总金额与和合同金额相同
            "check_status"=>"2",//默认已审核通过
            "flow_id"=>"235",//审批流程id
            "order_id"=>"4",//审批步骤排序
            "create_user_id"=>$param["contract_owner_user_id"],//订单创建人
            "owner_user_id"=>$param["contract_owner_user_id"],//订单负责人
            "create_time"=>$param["time"],//创建时间
            "update_time"=>$param["time"],//更新时间
            "is_ok"=>"1",//默认已完结
            "arrears"=>$param["contract_arrears"],//尾款金额
            "crm_grvgkz"=>$param["contract_crm_grvgkz"],//服务期数
            "state"=>"2",
            "butler_id"=>$param["contract_butler_id"],//管家id
            "butler_time"=>$param["time"],//捡取时间
            "is_accounting"=>$param["contract_is_accounting"],//是否流转到记账板块 1是
            "monthly_agency_price"=>$param["contract_monthly_agency_price"],//月代理单价
            "available"=>"0",//可用期数
            "crm_kfhgfp"=>"F-轻账历史数据",//收款单位
            "crm_oonnxn"=>$param["contract_crm_oonnxn"],//原销售，直接名字
        ];
        $contract_id=Db::name("crm_contract")->insertGetId($contractData);
        if(!$contract_id) throw new Exception("回款信息新增失败！编号:{$param['finance_code']}");
        return $contract_id;
    }
    //添加回款
    private function addReceivable($param){
        $receivableData=[
            "number"=>"2018-{$param["finance_code"]}",//财务编号2018
            "customer_id"=>$param["customer_id"],//客户id
            "contract_id"=>$param["contract_id"],//合同订单id
            "return_type"=>"微信支付",//回款方式
            "money"=>$param["finance_money"],//回款金额
            "check_status"=>"2",//默认已经审核通过
            "create_user_id"=>"1",//创建人id
            "owner_user_id"=>$param["finance_owner_user_id"],//负责人id
            "create_time"=>$param["time"],
            "update_time"=>$param["time"],
            "crm_lasahm"=>"正常核算",//是否核算
            "crm_oeseng"=>"0",//核算成本
            "code"=>$param["finance_code"],//编号
        ];
        $receivable_id=Db::name("crm_receivables")->insertGetId($receivableData);
        if(!$receivable_id) throw new Exception("回款信息新增失败！编号:{$param['finance_code']}");
        $financeData=[
            "create_user_id"=>$param["finance_owner_user_id"],
            "customer_id"=>$param["customer_id"],//客户id
            "contract_id"=>$param["contract_id"],//合同订单id
            "relation_id"=>$receivable_id,//关联id，回款关联receivables_id
            "order_sn"=>"2018-{$param["finance_code"]}",//回款编号2018
            "department"=>"F-轻账历史数据",
            "check_status"=>"2",//默认直接审核通过
            "order_type"=>"回款",
            "money"=>$param["finance_money"],//回款金额
            "crm_oeseng"=>0,//核定成本默认为0
            "calculate"=>$param["finance_money"],//和回款金额相同
            "calculate_month"=>"2018-08",//核算月份
            "calculate_way"=>"正常核算",//核算方式
            "check_time"=>date("Y-m-d H:i:s",$param["time"]),//审核时间
            "created_time"=>date("Y-m-d H:i:s",$param["time"]),//创建时间
        ];
        $finance_id=Db::name("crm_finance")->insertGetId($financeData);
        if(!$finance_id) throw new Exception("回款财务表信息新增失败！编号:{$param['finance_code']}");
    }
    /**
     * 获取客户信息，如果不存在就先新增
     */
    private function getCustomer($param){
        $customer_id=Db::name("crm_customer")->where(["name"=>trim($param["customer_company"])])->value("customer_id");
        if(!$customer_id){
            $insertData=[
                "name"=>$param["customer_company"],//客户公司名称
                "deal_status"=>"已成交",
                "crm_aloelf"=>$param["customer_name"],//客户姓名
                "mobile"=>"18888888888",//联系电话
                "deal_time"=>strtotime(date("2018-09-09")),//成交时间
                "source"=>"个人资源",
                "level"=> "C",
                "create_time"=>$param["time"],
                "update_time"=>$param["time"],
                "create_user_id"=>1,
                "owner_user_id"=>$param["customer_owner_user_id"],
                "consult_user_id"=>$param["customer_consult_user_id"],//咨询会计id
            ];
            $customer_id=Db::name("crm_customer")->insertGetId($insertData);
        }
        if(!$customer_id) throw new Exception("客户公司:{$param["customer_company"]}信息不存在或者无法新增！编号:{$param['finance_code']}");
        return $customer_id;
    }
    /**
     * @param $realname
     * 获取信息负责人id
     */
    private function get_owner_user_id($realname){
        switch ($realname){
            case "李光耀":
                $realname="超级管理员";
                break;
            case "马晓悦":
                $realname="周萍";
                break;
            case "林瑶":
                $realname="总经办（林瑶）";
                break;
            default :
        }
        $user_id=Db::name("admin_user")->where(["realname"=>trim($realname)])->value("id");
        if(!$user_id) throw new Exception("该用户:{$realname}不存在！");
        return $user_id;
    }



}